#include <iostream>
using namespace std;

/*
    我想统计Circle类总共创建了多少个对象
    方法1: 传统c语言的全局变量
    方法2: c++的静态成员变量

    static修饰成员变量 ==》 称之为静态成员变量
      1. 静态成员变量在类中声明，在类外定义
      2. static修饰的成员变量是该类所有对象共享的，该类所有对象共用同一个静态成员变量
      3. 静态成员变量不算类的大小

    实际作用：静态成员变量可以理解为类中所有对象共享的"全局变量"，可以用来在同一个类的对象之间传递信息
*/

class Circle
{
public:
    Circle(float r) : pi(3.14)
    {
        this->r = r;
        n++;
        cout << "你目前创建了 " << n << " 个对象" << endl;
        cout << "n的地址是 " << &n << "r的地址是 " << &r << endl;
    }

private:
    float r;
    // int n = 0; // 统计对象数量 c++11   每个类对象都有一个独立的n 导致统计不了 4
    static int n;   // 静态成员变量   不可以直接赋值
    const float pi; // 4
};

// 静态成员变量必须在类外初始化
int Circle::n = 0;

int main()
{

    Circle c1(1.0);
    Circle c2(2.0);
    Circle c3(3.0);
    Circle c4(4.0);
    Circle c5(5.0);

    cout << "sizeof(Circle) = " << sizeof(Circle) << endl;

    // cout << "Circle n = " << Circle::n << endl;

    return 0;
}